package com.kotlin.demo

/**
 * kotlin 语言it 关键字的特点
 *
 */
fun main() {
    val methodAction: (Int, Int, Int) -> String = { n1, n2, n3 ->
        val number = 123
        println("n1:$n1 n2:$n2 n3:$n3 ")
        "n1:$n1 n2:$n2 n3:$n3 "
    }
    methodAction(1, 2, 3)
    val methodAction1: (Int) -> String = {
        println("$it")
        "$it"
    }
    methodAction1(34)
    val methodAction2: (String) -> String = {
        "$it $it"
    }
    println(methodAction2("566"))
    //匿名函数  入参没有 返回值string
    val method = {
        ""
    }
    // 入参 n1 String 类型  返回值类型 Int
    val method1 = { n1: String ->
        234
    }
    //第一种调用方式
    loginApi("zq", "11") { code: Int, msg: String ->
        println("登录的结果为:$code $msg")
    }
    //第二种调用方式
    loginApi("zq", "11", { code: Int, msg: String ->
        println("登录的结果为:$code $msg")
    })

    loginApi("zq", "11", responseResult = { code: Int, msg: String ->
        println("登录的结果为:$code $msg")
    })

    //lambda属于函数类型的对象 第三个参数表示:传入对应函数的引用
    loginApi("zq", "22", ::responseResult)

    //函数的返回值是函数
    val method11 = method1(2, 3)
    val method111 = method11(2, "")
    println(method111)
}

/**
 * 此方法的返回值是匿名函数
 */
fun method1(p1: Int, p2: Int): (p1: Int, p2: String) -> String {
    println("method1 : p1$p1 p2$p2")
    return { _: Int, _: String ->
        "匿名函数"
    }

}

fun responseResult(code: Int, msg: String) {
    println("lambda属于函数类型的对象")
}


const val USERNAME_SERVER_DB = "zq"
const val PWD_SERVER_DB = "11"

/**
 * 前端登录方法
 */
inline fun loginApi(userName: String, pwd: String, responseResult: (Int, String) -> Unit) {
    if (userName.length > 1 && pwd.length > 1) {
        if (serverLogin(userName, pwd)) {
            responseResult(200, "登录成功")
        } else {
            responseResult(400, "登录失败")
        }
    }
}

/**
 * 后端登录方法
 */
fun serverLogin(name: String, pwd: String): Boolean {
    return name == USERNAME_SERVER_DB && pwd == PWD_SERVER_DB
}

